package cn.etg.controller;

import cn.etg.annotation.Controller;
import cn.etg.annotation.RequestMapping;
import cn.etg.entity.User;
import cn.etg.http.HttpServletRequest;
import cn.etg.http.HttpServletResponse;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
@Controller
public class UserController {
    // 创建users目录(位置：在项目下 ，参考static)
    private static File userDir;
    static {
        userDir = new File("./users");
        if(!userDir.exists()){
            userDir.mkdirs();
        }
    }
    @RequestMapping("/regUser")
    public void reg(HttpServletRequest request, HttpServletResponse response){
        System.out.println("进入注册方法");
        // 1.获取表单数据
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String nickname = request.getParameter("nickname");
        String age = request.getParameter("age");
        System.out.println(username+","+password+","+nickname+","+age);
        // 验证数据为null或空，年龄必须是在0-999之外使用正则表达式，结束方法
        if(username==null||username.isEmpty()||
                password==null||password.isEmpty()||
                nickname==null||nickname.isEmpty()||
                age==null||age.isEmpty()||
                !age.matches("[0-9]{1,3}")){
            response.sendRedirect("reg_no.html");
            return;
        }

        // 将数据存入到user对象中 （age为int类型）
        User user = new User(username,password,nickname,Integer.parseInt(age));
        // 在users文件夹下，创建已username命名的.obj文件
        File objFile = new File(userDir,username+".obj");
        // 如果文件存在，结束方法
        if(objFile.exists()){
            response.sendRedirect("have_user.html");
            return;
        }
        // 将数据写入到 XXX.obj文件中
        try(
                FileOutputStream fos = new FileOutputStream(objFile);
                ObjectOutputStream oos = new ObjectOutputStream(fos);
                ){
                oos.writeObject(user);
                response.sendRedirect("reg_ok.html");
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}
